package com.fxu.framework.core.sql;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**
 * 查询显示字段接口
 *
 * @author fangxu
 * @version 1.0.0
 */
interface SShow<Chain extends SShow, SE extends SEntity<?>> extends Serializable {
    /**
     * 实体类的类
     * @return 实体类
     */
    Class<SE> getClazz();

    /**
     * 实体类的类
     * @return 所有显示字段集合
     */
    List<SField<?>> getShowFields();

    /**
     * 设置读取显示字段
     * @param sFunc 显示字段集合
     * @return 本类对象
     */
    @SuppressWarnings("varargs")
    default Chain show(SFunc<SE, ?> ... sFunc) {
        if (sFunc != null) {
            //getShowFields().add(new SField<>(getClazz(), sFunc));
            for (SFunc<SE, ?> field : sFunc) {
                getShowFields().add(new SField<>(getClazz(), field));
            }
        }
        return (Chain)this;
    }

    /**
     * 设置多个读取显示字段
     * @param fields 显示字段集合
     * @return 本类对象
     */
    default Chain show(Collection<SField<SE>> fields) {
        if (fields != null && fields.size() > 0) {
            getShowFields().addAll(fields);
        }
        return (Chain)this;
    }

}